华为OD机试 - 最长子字符串的长度(一) (Python & C & C++ & Java&Go & JS & PHP)

题目描述

给定一个字符串s,将其视为环形,要求找出其中出现偶数次的最长子字符串的长度。

输入描述

输入一个字符串s。

输出描述

输出一个整数,表示出现偶数次的最长子字符串的长度。

示例

华为OD机试 - 最长子字符串的长度(一) (Python & C & C++ & Java&Go & JS & PHP)_第1张图片

解析题目

本题要求在给定的字符串中找出出现偶数次的最长子字符串的长度。为了解决这个问题,我们可以使用以下策略:

  1. 遍历整个字符串,统计每个字符出现的次数。
  2. 从字符串的起始位置开始,检查以当前位置为起点的子字符串中每个字符出现的次数是否为偶数。如果是,则更新最长偶数次字符的子字符串的长度。
  3. 重复步骤2,直到遍历完整个字符串。
  4. 返回最长偶数次字符的子字符串的长度。

Python代码实现

# 输入获取
s = input()
 
 
# 算法入口
def getResult():
    # s中'o'的个数
    zeroCount = 0
 
    for c in s:
        if c == 'o':
            zeroCount += 1
 
    if zeroCount % 2 == 0:
        return len(s)
    else:
        return len(s) - 1
 
 
# 算法调用
print(getResult())

C代码实现

#include 

int getResult() { // 定义一个函数来计算结果
   int zeroCount = 0; // 定义一个变量来记录o的个数
   char c; // 定义一个变量来存储当前字符

   for (c = *s; c != '\0'; c = *s++) { // 遍历字符串中的每个字符
       if (c == 'o') { // 如果当前字符是o
           zeroCount++; // o的个数加1
       }
   }

   if (zeroCount % 2 == 0) { // 如果o的个数是偶数
       return strlen(s); // 返回字符串长度
   } else {
       return strlen(s) - 1; // 否则返回字符串长度减1
   }
}

int main() {
   char *s; // 定义一个变量来存储字符串

   s = (char *)malloc(64); // 为字符串分配内存
   fgets(s, 64, stdin); // 从标准输入读取一行字符串
   s[strcspn(s, "\n")] = '\0'; // 去掉字符串末尾的换行符

   printf("%d", getResult()); // 调用函数计算结果并输出

   free(s); // 释放字符串内存
   return 0; // 程序结束
}

C++代码实现

#include 
#include 

int getResult(const std::string& s) { // 定义一个函数来计算结果
    int zeroCount = 0; // 定义一个变量来记录o的个数
    char c; // 定义一个变量来存储当前字符

    for (c = s[0]; c != '\0'; c = s[++i]) { // 遍历字符串中的每个字符
        if (c == 'o') { // 如果当前字符是o
            zeroCount++; // o的个数加1
        }
    }

    if (zeroCount % 2 == 0) { // 如果o的个数是偶数
        return s.length(); // 返回字符串长度
    } else {
        return s.length() - 1; // 否则返回字符串长度减1
    }
}

int main() {
    std::string s; // 定义一个变量来存储字符串

    std::cin >> s; // 从标准输入读取一行字符串

    std::cout << getResult(s) << std::endl; // 调用函数计算结果并输出

    return 0; // 程序结束
}

Java代码实现

import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in); // 创建一个Scanner对象从标准输入读取数据
       String input = scanner.nextLine(); // 读取一行字符串
       int result = getResult(input); // 调用getResult函数计算结果
       System.out.println(result); // 输出结果
   }

   public static int getResult(String s) { // 定义一个函数计算结果
       int zeroCount = 0; // 定义一个变量记录o的个数
       char c; // 定义一个变量存储当前字符

       for (int i = 0; i < s.length(); i++) { // 遍历字符串中的每个字符
           c = s.charAt(i); // 获取当前字符
           if (c == 'o') { // 如果当前字符是o
               zeroCount++; // o的个数加1
           }
       }

       return (zeroCount % 2 == 0) ? s.length() : s.length() - 1; // 如果o的个数是偶数返回字符串长度,否则返回字符串长度减1
   }
}

Go代码实现

package main

import (
	"fmt"
	"strings"
)

func getResult(s string) int {
	zeroCount := 0
	for _, c := range s {
		if c == 'o' {
			zeroCount++
		}
	}
	if zeroCount%2 == 0 {
		return len(s)
	} else {
		return len(s) - 1
	}
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	input := scanner.Text()
	result := getResult(input)
	fmt.Println(result)
}

PHP代码实现


<?php

function getResult() {
    $zeroCount = 0;
    $c = '';

    for ($c = $s[0]; $c !=== false; $c = $s[0]) {
        if ($c === 'o') {
            $zeroCount++;
        }
    }

    if ($zeroCount % 2 === 0) {
        return strlen($s);
    } else {
        return strlen($s) - 1;
    }
}

$s = "";
fgets($s, 64, STDIN);
$s = rtrim($s, "\n");

echo getResult();

?>

JS代码实现

function getResult() {
    let zeroCount = 0;
    let c;

    for (c = s[0]; c !== undefined; c = s[s.length - 1]) {
        if (c === 'o') {
            zeroCount++;
        }
    }

    if (zeroCount % 2 === 0) {
        return s.length;
    } else {
        return s.length - 1;
    }
}

function main() {
    let s = "";

    s = readline();
    s = s.trim();

    console.log(getResult());
}

你可能感兴趣的:(华为机考原题,python,华为od,c语言,面试,c++,秋招,java)