1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
java解法
首先输入一个整数 K,表示每个子字符串的最大长度。 接着输入一个字符串 inputString,该字符串由多个部分通过 - 分隔。 字符串分割:
使用 - 分隔符将输入的 inputString 分割成多个部分。 处理子字符串:
对于每个由 - 分隔后的部分(除了第一个部分,其他部分需要处理): 按照给定的最大长度 K 将字符串划分为子字符串。 判断每个子字符串中小写字母和大写字母的数量。 如果小写字母多,则将整个子字符串转为小写;如果大写字母多,则转为大写;如果相等,则保持原样。 返回结果:
最终将处理后的部分合并为一个字符串,每个部分之间仍用 - 分隔。
import java. util. * ;
public class Main {
public static void main ( String [ ] args) {
Scanner scanner = new Scanner ( System . in) ;
int K = scanner. nextInt ( ) ;
String inputString = scanner. next ( ) ;
System . out. println ( formatString ( K , inputString) ) ;
}
public static String formatString ( int K , String inputString) {
String [ ] sections = inputString. split ( "-" ) ;
Queue < String > queue = new LinkedList < > ( Arrays . asList ( sections) ) ;
StringBuilder finalResult = new StringBuilder ( queue. poll ( ) ) ;
StringBuilder buffer = new StringBuilder ( ) ;
while ( ! queue. isEmpty ( ) ) {
buffer. append ( queue. poll ( ) ) ;
}
int lowerCount = 0 , upperCount = 0 ;
StringBuilder segmentBuilder = new StringBuilder ( ) ;
for ( int i = 0 ; i < buffer. length ( ) ; i++ ) {
char current = buffer. charAt ( i) ;
if ( Character . isLowerCase ( current) ) lowerCount++ ;
else if ( Character . isUpperCase ( current) ) upperCount++ ;
segmentBuilder. append ( current) ;
if ( ( i + 1 ) % K == 0 || i == buffer. length ( ) - 1 ) {
if ( lowerCount > upperCount) {
finalResult. append ( "-" ) . append ( segmentBuilder. toString ( ) . toLowerCase ( ) ) ;
} else if ( upperCount > lowerCount) {
finalResult. append ( "-" ) . append ( segmentBuilder. toString ( ) . toUpperCase ( ) ) ;
} else {
finalResult. append ( "-" ) . append ( segmentBuilder. toString ( ) ) ;
}
lowerCount = 0 ;
upperCount = 0 ;
segmentBuilder. setLength ( 0 ) ;
}
}
return finalResult. toString ( ) ;
}
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
C++解法
输入一个整数 k,表示每个子字符串的最大长度。 输入一个字符串 s,该字符串由多个部分通过 - 分隔。 处理步骤:
首先按照 - 分隔符将输入字符串 s 分割为多个部分。 然后将这些部分拼接起来,去掉 -,并按照 k 的长度切分成若干子字符串。 对于每个子字符串,判断其中的小写字母和大写字母数量: 如果小写字母多,则将该子字符串转换为小写。 如果大写字母多,则将该子字符串转换为大写。 如果小写和大写字母数量相等,则不做转换。 最终将处理后的子字符串合并回原来的形式,并在各个子字符串之间用 - 连接。
# include
# include
# include
# include
using namespace std;
int k;
string s;
string convert ( const string & str) {
int lowerCount = 0 , upperCount = 0 ;
for ( size_t i = 0 ; i < str. length ( ) ; ++ i) {
char c = str[ i] ;
if ( c >= 'a' && c <= 'z' ) {
lowerCount++ ;
} else if ( c >= 'A' && c <= 'Z' ) {
upperCount++ ;
}
}
string result = str;
if ( lowerCount > upperCount) {
for ( size_t i = 0 ; i < result. length ( ) ; ++ i) {
result[ i] = tolower ( result[ i] ) ;
}
} else if ( upperCount > lowerCount) {
for ( size_t i = 0 ; i < result. length ( ) ; ++ i) {
result[ i] = toupper ( result[ i] ) ;
}
}
return result;
}
string getResult ( ) {
vector< string> parts;
size_t pos = 0 , prev = 0 ;
while ( ( pos = s. find ( "-" , prev) ) != string:: npos) {
parts. push_back ( s. substr ( prev, pos - prev) ) ;
prev = pos + 1 ;
}
parts. push_back ( s. substr ( prev) ) ;
string result = parts[ 0 ] ;
string newStr;
for ( size_t i = 1 ; i < parts. size ( ) ; i++ ) {
newStr += parts[ i] ;
}
for ( size_t i = 0 ; i < newStr. length ( ) ; i += k) {
string subStr = newStr. substr ( i, k) ;
result += "-" + convert ( subStr) ;
}
return result;
}
int main ( ) {
cin >> k;
cin >> s;
cout << getResult ( ) << endl;
return 0 ;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。 解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: