ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符串分割(100分Q2)

2022-06-10 00:31:26  阅读:213  来源: 互联网

标签:子串 分割 Q2 Scanner d5a8 成功 f3 字符串 100


将字符串分割成一些子串,使每个子串的ASClI码值的和均为水仙花数(水仙花数就是各位的立方之和等于本身的数)。
1、若分割不成功,则返回0

2、若分割成功且分割结果不唯一,则返回-1

3、若分割成功且分割结果唯一,则返回分割后子串的数目

 

输入:abc

输出:0(说明:分割不成功)

 

输入:f3@d5a8

输出:-1(说明:分割成功且结果不唯一。结果1:f3和@d5a8,结果2:f3@d5和a8)

 

输入:AXdddF

输出:2(说明:分割成功且结果唯一:AX和dddF)


字符串最大长度为200

 1 package com.zsx.exam;
 2 
 3 import java.util.LinkedList;
 4 import java.util.Scanner;
 5 
 6 public class Main2 {
 7     public static void main(String[] args) {
 8 
 9         // 接收控制台数据
10         Scanner scanner = new Scanner(System.in);
11         String s = scanner.next();
12         scanner.close();
13 
14         // 存放分割子串的末端索引的链表
15         // 如f3@d5a8可分割为f3和@d5a8两个水仙花字符串,则链表中存放2和7
16         LinkedList<Integer> list = new LinkedList<>();
17 
18         // 当前分割子串的起始索引
19         int p = 0;
20 
21         // 当前状态(1:已成功分割过一次 0:还未分割成功过 -1:分割结果不唯一)
22         byte status = 0;
23 
24         // 记录第一次分割成功的子串数
25         int num = 0;
26 
27         // q为当前分割子串的末端索引
28         for (int q = 1; q <= s.length(); q++) {
29             if (q == s.length()) {
30                 
31                 // 如果分割成功,并且之前已成功分割过一次,状态置为-1并跳出循环
32                 if (isSXHStr(s, p, q) && status == 1) {
33                     status = -1;
34                     break;
35                 }
36                 
37                 // 如果分割成功,并且之前还未分割成功过,状态置为1,继续往下走尝试其他分割方法
38                 if (isSXHStr(s, p, q) && status == 0) {
39                     status = 1;
40                     num = list.size() + 1;
41                 }
42                 
43                 // 如果链表为空,说明已遍历完所有分割方法,跳出循环
44                 if (list.isEmpty()) {
45                     break;
46                 }
47 
48                 // 改变p和q以尝试其他分割方法
49                 q = list.getLast();
50                 list.removeLast();
51                 p = list.isEmpty() ? 0 : list.getLast();
52             }
53             else if (isSXHStr(s, p, q)) {
54                 list.add(q);
55                 p = q;
56             }
57         }
58         System.out.println(status == 1 ? num : status);
59     }
60 
61     // 判断分割子串是否为水仙花字符串
62     public static boolean isSXHStr(String s, int p, int q) {
63         int sum = 0;
64         for (int i = p; i < q; i++) {
65             char c = s.charAt(i);
66             sum += c;
67         }
68         return isSXHNum(sum);
69     }
70 
71     // 判断整数是否为水仙花数
72     public static boolean isSXHNum(int num) {
73         String s = String.valueOf(num);
74         int sum = 0;
75         for (int i = 0; i < s.length(); i++) {
76             Integer digit = Integer.valueOf(String.valueOf(s.charAt(i)));
77             sum += digit * digit * digit;
78         }
79         return sum == num;
80     }
81 }

 

标签:子串,分割,Q2,Scanner,d5a8,成功,f3,字符串,100
来源: https://www.cnblogs.com/zhangshiyu/p/16361716.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有